//#include<iostream>
//using namespace std;
//const int N = 1e6 + 10;
//int e[N], ne[N];
//int id,h;
//
//
//int main()
//{
//	int n,x;
//	cin >> n;
//	for (int i = 1; i <= n;i++)
//	{
//		cin >> x;
//		id++;
//		e[id] = id;
//		ne[id] = x;
//	}
//	cin >> h;
//	for (int i = h; i >0; i=ne[i])
//	{
//		cout << e[i] << " ";
//	}
//}

//#include<iostream>
//using namespace std;
//const int N = 1e5 + 10;
//const int M = 1e6 + 10;
//int e[N], ne[N];
//int h, id;
//int mp[M];
//
//int main()
//{
//	int x, y = 0;
//	int q,op;
//	cin >> q;
//	id++;
//	e[id] = 1;
//	mp[1] = id;
//	while(q--)
//	{
//		cin >> op;
//		cin >> x;
//		int p = mp[x];
//		if (op == 1)
//		{
//			cin >> y;
//			id++;
//			e[id] = y;
//			ne[id] = ne[p];
//			ne[p] = id;
//			mp[y] = id;
//
//		}
//
//		else if (op == 2)
//		{
//			if (ne[p])
//				cout << e[ne[p]] << endl;
//			else
//				cout << 0 << endl;
//		}
//		else
//		{
//			ne[p] = ne[ne[p]];
//		}
//	}
//	return 0;
//
//}

#include<iostream>
using namespace std;
const int N = 1e5 + 10;
int ne[N], pre[N], e[N],mp[N];
int h = 0;
int id = 0;

bool st[N];

int main()
{
	int n;
	int k, p;	cin >> n;
	id++;
	e[id] = 1;
	ne[h] = 1;
	pre[1] = h;
	mp[1] = id;
	for (int i = 2; i <= n; i++)
	{
		cin >> k >> p;
		int l = mp[i - 1];
		if (p == 0)
		{
			id++;
			e[id] = i;
			ne[id] = l;
			pre[id] = pre[l];
			ne[pre[l]] = id;
			pre[l] = id;
			mp[i] = id;
		}
		else if (p == 1)
		{
			id++;
			e[id] = i;
			ne[id] = ne[l];
			pre[id] = l;
			pre[ne[l]] = id;
			ne[l] = id;
			mp[i] = id;
		}

	}
	int m;
	int x;
	cin >> m;
	while (m--)
	{
		cin >> x;
		if (st[x] != true)
		{
			ne[pre[x]] = ne[x];
			pre[ne[x]] = pre[x];
			st[x] = true;
		}
		else
			continue;
	}

	for (int i = ne[h]; i > 0; i = ne[i])
	{
		cout << e[i] << " ";
	}
	return 0;
}
